<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of initial_evaluations_controller
 *
 * @author wilavel
 */
class InitialEvaluationsController extends AppController {

    //put your code here
    var $name = "InitialEvaluations";

    function index() {
        $this->layout = "ajax";
        $this->InitialEvaluation->recursive = 0;

        $proyect_id = $this->Session->read('proy_id');
        $this->set('usuario', $this->Auth->user());
        if ($proyect_id == "") {
            $this->Session->setFlash('No ha seleccionado Proyecto');
            $this->redirect(array('controller' => 'Proyects', 'action' => 'index'));
        } else {
            $this->set('proyect_id', $proyect_id);
            $this->set('evaluaciones', $this->InitialEvaluation->find('all', array('conditions' => array('InitialEvaluation.proyect_id' => $proyect_id), 'fields' => array('InitialEvaluation.id', 'InitialEvaluation.calificacion_integral', 'User.username', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido', 'Proyect.codigo'), 'order' => array('InitialEvaluation.id DESC'))));
        }
    }

    function add($proyect_id) {
        $this->set('proyect_id', $proyect_id);
        $this->InitialEvaluation->recursive = -1;
        $this->data = $this->InitialEvaluation->find('first', array('conditions' => array('InitialEvaluation.proyect_id' => $proyect_id), 'order' => array('InitialEvaluation.id DESC')));
        $this->data['InitialEvaluation']['user_id'] = $this->Auth->user('id');
        $this->data['InitialEvaluation']['proyect_id'] = $proyect_id;
        $anterior_id = empty($this->data['InitialEvaluation']['id']) ? 0 : $this->data['InitialEvaluation']['id'];
        unset($this->data['InitialEvaluation']['id']);


        //Busco los predios que corresponden con el proyecto
        App::Import('model', 'Candidate');
        $prop = new Property();
        $prop->recursive = -1;
        $predios = $prop->find('all', array('conditions' => array('Property.proyect_id' => $proyect_id), 'fields' => array('Property.id')));

        //verifico que cada predio tenga al menos un avaluo y un plano topografico.
        $crearEvaluacionInicial = true;
//        Esta variable se utilizara para saber si se permite o no la creacion de una evaluacion inicial
        foreach ($predios as $predio) {
            //busco el ultimo avaluo por cada predio y lo agrego a la tabla initial_evaluation_annexes
            App::Import('model', 'EvaluationAppraisals');
            $avaluo = new EvaluationAppraisal();
            //Cuento cuantos avaluos tiene el predio
            $cantidadAvaluos = $avaluo->find('count', array('conditions' => array('EvaluationAppraisal.property_id' => $predio['Property']['id'])));

            //Cuento cuantos planos topograficos tiene el predio
            App::Import('model', 'TopographicMap');
            $planoTopografico = new TopographicMap();
            //buscar el ultimo plano topografico del predio
            $cantidadPlanos = $planoTopografico->find('count', array('conditions' => array('TopographicMap.property_id' => $predio['Property']['id'])));

            if ($cantidadAvaluos < 1 or $cantidadPlanos < 1) {
                $crearEvaluacionInicial = false;
            }
        }
        if ($crearEvaluacionInicial) {

            if ($this->InitialEvaluation->saveAll($this->data)) {
                $last_id = $this->InitialEvaluation->getLastInsertID();
                $this->InitialEvaluation->ProductiveLine->recursive = -1;
                $lineas = $this->InitialEvaluation->ProductiveLine->find('all', array('conditions' => array('ProductiveLine.initial_evaluation_id' => $anterior_id)));

                foreach ($lineas as $linea) {
                    unset($linea['ProductiveLine']['id']);
                    $linea['ProductiveLine']['initial_evaluation_id'] = $last_id;
                    $this->InitialEvaluation->ProductiveLine->save($linea);
                }

                foreach ($predios as $predio) {
                    //busco el ultimo avaluo por cada predio y lo agrego a la tabla initial_evaluation_annexes
                    $avaluo = new EvaluationAppraisal();
                    $avaluo->recursive = -1;
                    //buscar el ultimo avaluo del predio
                    $idUltimoAvaluo = $avaluo->field('id', array('EvaluationAppraisal.property_id' => $predio['Property']['id']), 'EvaluationAppraisal.id DESC');

                    //busco el ultimo plano topografico por cada predio y lo agrego a la tabla initial_evaluation_annexes
                    $planoTopografico = new TopographicMap();
                    $planoTopografico->recursive = -1;
                    //buscar el ultimo plano topografico del predio
                    $idUltimoPlano = $planoTopografico->field('id', array('TopographicMap.property_id' => $predio['Property']['id']), 'TopographicMap.id DESC');

                    //insertar el id del ultimo avaluo y plano en la tabla initial_evaluation_annexes   
                    $insertar = array();
                    $insertar['InitialEvaluationAnnex']['initial_evaluation_id'] = $last_id;
                    $insertar['InitialEvaluationAnnex']['evaluation_appraisal_id'] = $idUltimoAvaluo;
                    $insertar['InitialEvaluationAnnex']['topographic_map_id'] = $idUltimoPlano;

                    $this->InitialEvaluation->InitialEvaluationAnnex->create();
                    $this->InitialEvaluation->InitialEvaluationAnnex->save($insertar);
                }


                $this->Session->setFlash('Registro creado exitosamente');
                $this->redirect(array('controller' => 'InitialEvaluations', 'action' => 'index'));
            }
        } else {
            $this->Session->setFlash('Para poder crear una evaluación inicial se debe crear antes un plano topográfico y un avalúo por cada predio del proyecto.');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        }
    }

    function edit($evaluation_id, $proyect_id) {
        App::Import('model', 'Property');
        $this->set('proyect_id', $proyect_id);
        $this->set('usuario', $this->Auth->user());

        $prop = new Property();
        $prop->recursive = -1;
        $this->set("properties", $prop->find('all', array('conditions' => array('Property.proyect_id' => $proyect_id), 'fields' => array('Property.id', 'Property.codigo', 'Property.nombre'))));

        if (empty($this->data)) {
            $this->data = $this->InitialEvaluation->find('first', array('conditions' => array('InitialEvaluation.id' => $evaluation_id)));
        } else {
            if ($this->InitialEvaluation->save($this->data)) {
                $this->Session->setFlash('Registro editado exitosamente');
                $this->redirect(array('controller' => 'InitialEvaluations', 'action' => 'edit', $evaluation_id, $proyect_id));
            }
        }
    }

    function families($evaluation_id, $proyect_id) {
        $this->layout = "ajax";
        $this->set('proyect_id', $proyect_id);
        $this->set('evaluation_id', $evaluation_id);
    }

    function delete($id) {
        if ($this->InitialEvaluation->delete($id, true)) {
            $this->Session->setFlash('Registro borrado exitosamente');
            $this->redirect(array('controller' => 'InitialEvaluations', 'action' => 'index'));
        }
    }

    function correction_letter($evaluation_id, $tipo) {
        $this->layout = "pdf";
        $this->InitialEvaluation->recursive = -1;
        $this->set('tipo', $tipo);
        $evaluacion = $this->InitialEvaluation->find('first', array('conditions' => array('InitialEvaluation.id' => $evaluation_id), 'fields' => array('InitialEvaluation.user_id', 'InitialEvaluation.proyect_id', 'InitialEvaluation.id', 'InitialEvaluation.predio_ubicacion_calificacion', 'InitialEvaluation.asistencia_representante', 'InitialEvaluation.asistencia_entidad', 'InitialEvaluation.predio_ubicacion_concepto', 'InitialEvaluation.predio_identificacion_calificacion', 'InitialEvaluation.predio_identificacion_concepto', 'InitialEvaluation.area_productiva_calificacion', 'InitialEvaluation.area_productiva_concepto', 'InitialEvaluation.construcciones_calificacion', 'InitialEvaluation.construcciones_concepto', 'InitialEvaluation.calificacion_valor_avaluo', 'InitialEvaluation.concepto_valor_avaluo', 'InitialEvaluation.concepto_areas_explotacion', 'InitialEvaluation.calificacion_areas_explotacion', 'InitialEvaluation.formularios_concepto', 'InitialEvaluation.formularios_calificacion', 'InitialEvaluation.explotacion_agraria_calificacion', 'InitialEvaluation.explotacion_agraria_concepto', 'InitialEvaluation.asistencia_calificacion', 'InitialEvaluation.asistencia_concepto', 'InitialEvaluation.vocacion_productiva_concepto', 'InitialEvaluation.vocacion_productiva_calificacion', 'InitialEvaluation.componente_financiero_calificacion', 'InitialEvaluation.componente_financiero_concepto', 'InitialEvaluation.concepto_integral', 'InitialEvaluation.calificacion_integral')));
        $this->set('evaluacion', $evaluacion);
        App::Import('model', 'ProyectDocument');
        $ProyectDocument = new ProyectDocument();
        $ProyectDocument->recursive = 1;

        $this->set('documentos', $ProyectDocument->find('all', array('conditions' => array('ProyectDocument.proyect_id' => $evaluacion['InitialEvaluation']['proyect_id'], 'ProyectDocument.calificacion' => 'Subsanable'), 'fields' => array('Document.descripcion', 'ProyectDocument.calificacion', 'ProyectDocument.concepto'))));

        App::Import('model', 'ProyectReview');
        $ProyectReview = new ProyectReview();
        $ProyectReview->recursive = -1;
        $this->set('revision_proyecto', $ProyectReview->find('first', array('conditions' => array('ProyectReview.proyect_id' => $evaluacion['InitialEvaluation']['proyect_id']), 'order' => array('ProyectReview.id DESC'), 'fields' => array('ProyectReview.calificacion', 'ProyectReview.concepto'))));

        App::Import('model', 'Property');
        $Property = new Property();
        $Property->recursive = -1;
        $this->set('predios', $Property->find('all', array('conditions' => array('Property.proyect_id' => $evaluacion['InitialEvaluation']['proyect_id']), 'fields' => array('Property.id', 'Property.codigo'))));

        App::Import('model', 'Candidate');
        $Candidate = new Candidate();
        $Candidate->recursive = -1;
        $this->set('aspirantes', $Candidate->find('all', array('conditions' => array('Candidate.proyect_id' => $evaluacion['InitialEvaluation']['proyect_id']), 'fields' => array('Candidate.id', 'Candidate.1er_nombre', 'Candidate.1er_apellido', 'Candidate.nro_ident'))));
    }

    function evaluation_report() {

        $this->layout = "csv";
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        //create a file
        $filename = "evaluacion_inicial_" . date("Y.m.d") . ".csv";
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename="' . $filename . '"');

        // "Codigo del proyecto","Dpto Ejecucion","Municipio de  Ejecucion","Evaluador" ,"Familias totales inscritas","Familias principales habilitadas","Familias suplentes habilitadas","No. Predios","Area Predio(s)Títulos","Area Predio(s) Plano","Área potencialmente utilizable","Area Bosques o Cobertura Vegetal","Valor predio(s) (avalúo)","Valor predio(s) (F 3)","Venta Parcial","Presenta la totalidad de anexos del formulario 8","Ubicación de los predios","Suelos","Mejoras No útiles o Suntuarias","","UAF","TIR","CABIDA  Minima","CABIDA  Maxima","Subsidio predio aprobado","Subsidio predio Maximo","Subsu ppx max","POR CABIDA FAMILIAR,POR AREA EN TITULOS,POR NEGOCIACIÓN,"Concepto Integral de Elegibilidad"
        $cabecera = array('Código', "Acta de panel", "Dpto Ejecución", "Municipio de  Ejecuciòn", "Evaluador", "Familias totales inscritas", "Familias principales habilitadas", "Familias suplentes habilitadas", "No. Predios", "Área Predio(s) Títulos (suma del área ingreada en fase I a cada predio) ", "Area Predio(s) Plano (suma del área de plano ingresada  en fase IIB a cada predio)", "Área útil según plano", "Area Bosques o Cobertura Vegetal (plano)", "Àrea útil avalúo ", "Àrea no útil avalúo ", "Valor predio(s) (avalúo)", "Valor predio(s) (F 3) formulario 3 ingreasdo en fase I", 'Venta parcial', " EI Predio ubicación calificación", "Predio ubicación concepto", "Predio identificacion calificación", "Predio identificacion concepto", "Calificación Precio del (los) predio(s)", "Concepto precio del (los) predio(s)", "Áreas productivas calificación", "Áreas productivas concepto", "Construcciones y anexos calificación", "Construcciones y anexos concepto", "Área del proyecto productivo formulado calificación", "Área del proyecto productivo formulado concepto", "Área explotación actual", "Área explotación proyectada", "Compatibilidad del proyecto productivo respecto a lo descrito en el formularios 6 y 7", "Compatibilidad del proyecto productivo respecto a lo descrito en el formularios 6 y 7 concepto", "Explotación Agropecuaria calificación", "Explotación Agropecuaria concepto", "Vocación productiva calificacion", "Vocación productiva concepto", "Asistencia técnica calificacion", "Asistencia técnica concepto", "Información finaciera calificación", "Información finaciera concepto", "Lineas productívas (Evaluación inicial)", "Calificación integral Evaluación inicial", "Concepto integral integral Evaluación inicial", "Revisión conceptos");
        fputcsv($csv_file, $cabecera, ';', '"');
        $iniciales = $this->InitialEvaluation->Query('SELECT Convocatoria.smmv_proyecto,Convocatoria.valor_smmv,Convocatoria.smmv_predios,Departament.name,City.name,Proyect.codigo,Proyect.predio_valor,Proyect.id,User.nombre,User.primer_apellido,InitialEvaluation.* 
            FROM proyects Proyect LEFT JOIN initial_evaluations InitialEvaluation ON Proyect.id=InitialEvaluation.proyect_id 
            LEFT JOIN users User On User.id=InitialEvaluation.user_id 
            LEFT JOIN cities City On City.id=Proyect.city_id 
            LEFT JOIN departaments Departament On City.departament_id=Departament.id 
            LEFT JOIN calls Convocatoria On Convocatoria.id=Proyect.call_id 
            WHERE InitialEvaluation.id=(SELECT max(id) from initial_evaluations WHERE proyect_id=Proyect.id )');
        App::Import('model', 'Proyect');

        $Proyect = new Proyect();
        foreach ($iniciales as $inicial) {
            $revision = "";
            $acta = $Proyect->FormAct->find('first', array('recursive' => -1, 'conditions' => array('FormAct.proyect_id' => $inicial['Proyect']['id']), 'fields' => array('FormAct.numero_acta')));

            $total_familias = $Proyect->Candidate->find('count', array('recursive' => -1, 'conditions' => array('Candidate.proyect_id' => $inicial['Proyect']['id'], 'Candidate.candidate_id' => 0)));
            $total_principales = $Proyect->Candidate->find('count', array('recursive' => -1, 'conditions' => array('Candidate.proyect_id' => $inicial['Proyect']['id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 1, 'Candidate.estado_filtro' => array(1, 5, 6))));
            $total_suplentes = $Proyect->Candidate->find('count', array('recursive' => -1, 'conditions' => array('Candidate.proyect_id' => $inicial['Proyect']['id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 2, 'Candidate.estado_filtro' => array(1, 5, 6))));
            $predios = $Proyect->Property->find('all', array('recursive' => -1, 'conditions' => array('Property.proyect_id' => $inicial['Proyect']['id']), 'fields' => array('Property.nombre', 'Property.id', 'Property.area_negociacion', 'Property.area_titulo', 'Property.matricula')));
            $num_predios = count($predios);
            $area_titulo = 0;
            $area_plano = 0;
            $area_util = 0;
            $area_util_avaluo = 0;
            //Area bosque pendiente por deducir
            $area_bosques = 0;
            $area_avaluo = 0;
            $valor_avaluo = 0;
            $area_no_util_avaluo = 0;


            foreach ($predios as $predio) {
                $area_titulo+=floatval($predio['Property']['area_titulo']);
                $plano = $Proyect->Property->TopographicMap->find('first', array('conditions' => array('TopographicMap.property_id' => $predio['Property']['id']), 'fields' => array('TopographicMap.id', 'TopographicMap.area', 'TopographicMap.venta_parcial'), 'order' => array('TopographicMap.id DESC')));
                $area_plano = $plano['TopographicMap']['area'];

                $area = $Proyect->Property->TopographicMap->TopographicArea->find('first', array('conditions' => array('TopographicArea.topographic_map_id' => $plano['TopographicMap']['id'], 'AreaType.productiva' => 1), 'fields' => array('total')));
                $area_util = $area_util + $area['TopographicArea']['total'];

                $areab = $Proyect->Property->TopographicMap->TopographicArea->find('first', array('conditions' => array('TopographicArea.topographic_map_id' => $plano['TopographicMap']['id'], 'AreaType.id' => array(7, 12)), 'fields' => array('total')));
                $area_bosques = $area_bosques + $areab['TopographicArea']['total'];

                $avaluo = $Proyect->Property->EvaluationAppraisal->find('first', array('conditions' => array('EvaluationAppraisal.property_id' => $predio['Property']['id']), 'fields' => array('EvaluationAppraisal.id', 'EvaluationAppraisal.area', 'EvaluationAppraisal.valor'), 'order' => array('EvaluationAppraisal.id DESC')));
                $area_avaluo+=$avaluo['EvaluationAppraisal']['area'];
                $valor_avaluo+=$avaluo['EvaluationAppraisal']['valor'];

                $unidades = $Proyect->Property->EvaluationAppraisal->EvaluationPhysiographicUnit->find('first', array('conditions' => array('EvaluationPhysiographicUnit.util' => 'SI', 'EvaluationPhysiographicUnit.evaluation_appraisal_id' => $avaluo['EvaluationAppraisal']['id']), 'fields' => array('EvaluationPhysiographicUnit.sumaArea')));

                $area_util_avaluo+=$unidades['EvaluationPhysiographicUnit']['sumaArea'];

                $unidades = $Proyect->Property->EvaluationAppraisal->EvaluationPhysiographicUnit->find('first', array('conditions' => array('EvaluationPhysiographicUnit.util' => 'NO', 'EvaluationPhysiographicUnit.evaluation_appraisal_id' => $avaluo['EvaluationAppraisal']['id']), 'fields' => array('EvaluationPhysiographicUnit.sumaArea')));
                $area_no_util_avaluo+=$unidades['EvaluationPhysiographicUnit']['sumaArea'];
            }

            $fila = array($inicial['Proyect']['codigo'], $acta['FormAct']['numero_acta'], $inicial['Departament']['name'], $inicial['City']['name'], $inicial['User']['nombre'] . " " . $inicial['User']['primer_apellido'], $total_familias, $total_principales, $total_suplentes, $num_predios, number_format($area_titulo, 4, ',', '.'), number_format($area_plano, 4, ',', '.'), number_format($area_util, 4, ',', '.'), number_format($area_bosques, 4, ',', '.'), number_format($area_util_avaluo, 4, ',', '.'), number_format($area_no_util_avaluo, 4, ',', '.'), $valor_avaluo, $inicial['Proyect']['predio_valor'], $plano['TopographicMap']['venta_parcial']);
            //DESDE ACA VAN LOS CAMPOS DE LA EVALUACION INICIAL 
            $fila[] = $inicial['InitialEvaluation']['predio_ubicacion_calificacion'];
            if ($inicial['InitialEvaluation']['predio_ubicacion_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']['predio_ubicacion_concepto'];


            if ($inicial['InitialEvaluation']['predio_identificacion_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']['predio_identificacion_concepto'];
            $fila[] = $inicial['InitialEvaluation']['predio_identificacion_calificacion'];

            if ($inicial['InitialEvaluation']['calificacion_valor_avaluo'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["calificacion_valor_avaluo"];
            $fila[] = $inicial['InitialEvaluation']["concepto_valor_avaluo"];

            if ($inicial['InitialEvaluation']['area_productiva_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["construcciones_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["area_productiva_concepto"];
            if ($inicial['InitialEvaluation']['area_productiva_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }

            $fila[] = $inicial['InitialEvaluation']["construcciones_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["construcciones_concepto"];
            if ($inicial['InitialEvaluation']['calificacion_areas_explotacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["calificacion_areas_explotacion"];
            $fila[] = $inicial['InitialEvaluation']["concepto_areas_explotacion"];


            $fila[] = $inicial['InitialEvaluation']["area_explotacion_actual"];
            $fila[] = $inicial['InitialEvaluation']["area_explotacion_proyectada"];

            if ($inicial['InitialEvaluation']['formularios_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }

            $fila[] = $inicial['InitialEvaluation']["formularios_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["formularios_concepto"];
            
            if ($inicial['InitialEvaluation']['explotacion_agraria_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["explotacion_agraria_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["explotacion_agraria_concepto"];

            if ($inicial['InitialEvaluation']['vocacion_productiva_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["vocacion_productiva_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["vocacion_productiva_concepto"];

            if ($inicial['InitialEvaluation']['asistencia_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["asistencia_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["asistencia_concepto"];

            if ($inicial['InitialEvaluation']['componente_financiero_calificacion'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["componente_financiero_calificacion"];
            $fila[] = $inicial['InitialEvaluation']["componente_financiero_concepto"];

            //Lineas productivas de evaluaion inicial
            App::Import('model', 'InitialEvaluation');
            $InitialEvaluation = new InitialEvaluation();
            $lineas = $InitialEvaluation->ProductiveLine->find('all', array('fields' => array('ProductiveActivity.nombre'), 'conditions' => array('ProductiveLine.initial_evaluation_id' => $inicial['InitialEvaluation']["id"])));
            $strLineas = "";
            foreach ($lineas as $linea) {
                $strLineas = $linea['ProductiveActivity']['nombre'] . " ";
            }

            $fila[] = $strLineas;
             if ($inicial['InitialEvaluation']['calificacion_integral'] != "Cumple") {
                $revision = "Revisar";
            }
            $fila[] = $inicial['InitialEvaluation']["calificacion_integral"];
            $fila[] = $inicial['InitialEvaluation']["concepto_integral"];
            $fila[] = $revision;

            fputcsv($csv_file, $fila, ';', '"');
        }
        fclose($csv_file);
    }

}

?>
